#include <bits/stdc++.h>
// 2025/01/30
// tag:
// Author: Zhang Muen
using namespace std;

int enter[100001], out[100001], n, m, vis[100001];
vector<int> graph[100001];
stack<int> ans;

void dfs(int x)
{
    for (int i = vis[x]; i < graph[x].size(); i = vis[x]) {
        vis[x] = i + 1;
        dfs(graph[x][i]);
    }
    ans.push(x);
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        graph[u].push_back(v);
        enter[v]++;
        out[u]++;
    }
    for (int i = 1; i <= n; i++)
        sort(graph[i].begin(), graph[i].end());
    int s = 0, e = 0;
    for (int i = 1; i <= n; i++)
        if (enter[i] == out[i] - 1 && !s)
            s = i;
        else if (enter[i] == out[i] + 1 &&!e)
            e = i;
        else if (enter[i] != out[i]) {
            cout << "No" << endl;
            return 0;
        }
    if (!s)
        s = 1;
    dfs(s);
    if (ans.size() == m + 1) {
        for (int j = 0; j <= m; j++) {
            cout << ans.top() << " ";
            ans.pop();
        }
        return 0;
    }
    cout << "No" << endl;
    return 0;
}